/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Interfaz;

import DATABASE.SendMailDB;
import Negocio.*;
import java.awt.BorderLayout;
import java.awt.Dialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import oracle.net.aso.f;
import oracle.net.aso.i;


/**
 *
 * @author Usuario
 */
public class Principal extends javax.swing.JFrame {

    /**
     * Creates new form Interfaz
     */
    int incremento=0;
    Mail mail ;
    String fecha;
    ArrayList recibidos;
    ArrayList enviados;
    ArrayList borradores;
    ArrayList etiquetados;
    ArrayList <MailRecibido> seleccionados = new ArrayList() ;
    boolean borrador=false;
    public String Path=null;
    DefaultTreeModel modelo = null;
   
    public Principal()  {
        
     //   
        try
        {
           UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        }
        catch(Exception e)
        {
        }
        initComponents();
        this.setLocationRelativeTo(null);
        //Hilo h=new Hilo();
        //h.start();
        Calendar Cal= Calendar.getInstance();
        fecha= Cal.get(Cal.DATE)+"/"+(Cal.get(Cal.MONTH)+1)+"/"+Cal.get(Cal.YEAR)+" "+Cal.get(Cal.HOUR_OF_DAY)+":"+Cal.get(Cal.MINUTE)+":"+Cal.get(Cal.SECOND);
        lblFecha.setText(fecha);
        ListarEnviados();
        actualizarRecibidos();
        ListarBorradores();
        try {
            
            cargarCarpetas();
        } catch (SQLException ex) {
            Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
        }

        cargar();
        
        
       //cmdActualizarActionPerformed(evt);
        
        //actualizar("ENVIADO",tablaEnviados);
        //actualizar("RECIBIDO",tablaRecibidos);
        //actualizar("BORRADOR",tablaBorradores);
        
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        NuevoMensaje = new javax.swing.JDialog();
        jLabel2 = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        txtDestinatario = new javax.swing.JTextField();
        txtAsunto = new javax.swing.JTextField();
        jScrollPane2 = new javax.swing.JScrollPane();
        txtMensaje = new javax.swing.JTextArea();
        jLabel4 = new javax.swing.JLabel();
        cmdBorrar = new javax.swing.JButton();
        cmdEnviar = new javax.swing.JButton();
        cmdSalir = new javax.swing.JButton();
        jLabel5 = new javax.swing.JLabel();
        lblFecha = new javax.swing.JLabel();
        cmdGuardar = new javax.swing.JButton();
        DefinirFiltros = new javax.swing.JDialog();
        NuevaCarpeta = new javax.swing.JDialog();
        menuArchivos = new javax.swing.JPopupMenu();
        Nuevo = new javax.swing.JMenuItem();
        Borrar = new javax.swing.JMenuItem();
        Etiqueta = new javax.swing.JDialog();
        chkImportante = new javax.swing.JCheckBox();
        chkUrgente = new javax.swing.JCheckBox();
        jLabel7 = new javax.swing.JLabel();
        cmdAplicar = new javax.swing.JButton();
        cmdCancelar = new javax.swing.JButton();
        jLabel8 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jLabel10 = new javax.swing.JLabel();
        chkFavoritos = new javax.swing.JCheckBox();
        Configuraciones = new javax.swing.JDialog();
        jLabel6 = new javax.swing.JLabel();
        jLabel11 = new javax.swing.JLabel();
        cmbServidores = new javax.swing.JComboBox();
        cmdGuardarConfiguraciones = new javax.swing.JButton();
        fileSave = new javax.swing.JFileChooser();
        ArbolCarpetas = new javax.swing.JDialog();
        jScrollPane3 = new javax.swing.JScrollPane();
        Tree = new javax.swing.JTree();
        btn_Agregar = new javax.swing.JButton();
        btn_Delete = new javax.swing.JButton();
        panelMensajes = new javax.swing.JTabbedPane();
        panelRecibidos = new javax.swing.JPanel();
        jScrollPane4 = new javax.swing.JScrollPane();
        tablaRecibidos = new javax.swing.JTable();
        cmdActualizar = new javax.swing.JButton();
        cdmEtiquetar = new javax.swing.JButton();
        cmdExportarRecibidos = new javax.swing.JButton();
        panelEnviados = new javax.swing.JPanel();
        jScrollPane5 = new javax.swing.JScrollPane();
        tablaEnviados = new javax.swing.JTable();
        cmdExportarEnviados = new javax.swing.JButton();
        panelBorradores = new javax.swing.JPanel();
        jScrollPane7 = new javax.swing.JScrollPane();
        tablaBorradores = new javax.swing.JTable();
        panelEtiquetados = new javax.swing.JPanel();
        jScrollPane6 = new javax.swing.JScrollPane();
        tablaEtiquetados = new javax.swing.JTable();
        panelEliminados = new javax.swing.JPanel();
        jScrollPane8 = new javax.swing.JScrollPane();
        tablaBorradores1 = new javax.swing.JTable();
        lblLogo1 = new javax.swing.JLabel();
        panelEscritura = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        listaOpciones = new javax.swing.JList();
        cmdMisCarpetas = new javax.swing.JButton();
        jScrollPane9 = new javax.swing.JScrollPane();
        Tree1 = new javax.swing.JTree();

        NuevoMensaje.setTitle("Escribir un Nuevo Mensaje");

        jLabel2.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jLabel2.setText("HOLA... Cliente@ejemplo.com");

        jLabel1.setText("Destinatario:");

        jLabel3.setText("Asunto:");

        txtMensaje.setColumns(20);
        txtMensaje.setRows(5);
        jScrollPane2.setViewportView(txtMensaje);

        jLabel4.setText("Escriba el mail aquí:");

        cmdBorrar.setText("Borrar...");
        cmdBorrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdBorrarActionPerformed(evt);
            }
        });

        cmdEnviar.setText("Enviar...");
        cmdEnviar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdEnviarActionPerformed(evt);
            }
        });

        cmdSalir.setText("Salir...");
        cmdSalir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdSalirActionPerformed(evt);
            }
        });

        jLabel5.setText("Fecha:");

        lblFecha.setText("jLabel6");

        cmdGuardar.setText("Guardar...");
        cmdGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdGuardarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout NuevoMensajeLayout = new javax.swing.GroupLayout(NuevoMensaje.getContentPane());
        NuevoMensaje.getContentPane().setLayout(NuevoMensajeLayout);
        NuevoMensajeLayout.setHorizontalGroup(
            NuevoMensajeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(NuevoMensajeLayout.createSequentialGroup()
                .addGap(35, 35, 35)
                .addGroup(NuevoMensajeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(NuevoMensajeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addGroup(NuevoMensajeLayout.createSequentialGroup()
                            .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 254, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGap(94, 94, 94)
                            .addComponent(jLabel5)
                            .addGap(29, 29, 29)
                            .addComponent(lblFecha, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addGap(71, 71, 71))
                        .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 636, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel4))
                    .addGroup(NuevoMensajeLayout.createSequentialGroup()
                        .addGroup(NuevoMensajeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addGap(18, 18, 18)
                        .addGroup(NuevoMensajeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(txtDestinatario)
                            .addComponent(txtAsunto, javax.swing.GroupLayout.DEFAULT_SIZE, 373, Short.MAX_VALUE))))
                .addContainerGap(33, Short.MAX_VALUE))
            .addGroup(NuevoMensajeLayout.createSequentialGroup()
                .addGap(105, 105, 105)
                .addComponent(cmdEnviar, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(cmdGuardar, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(37, 37, 37)
                .addComponent(cmdBorrar, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(34, 34, 34)
                .addComponent(cmdSalir, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(106, 106, 106))
        );
        NuevoMensajeLayout.setVerticalGroup(
            NuevoMensajeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(NuevoMensajeLayout.createSequentialGroup()
                .addGap(6, 6, 6)
                .addGroup(NuevoMensajeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel5)
                    .addComponent(lblFecha))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(NuevoMensajeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(txtDestinatario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(NuevoMensajeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel3)
                    .addComponent(txtAsunto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(28, 28, 28)
                .addComponent(jLabel4)
                .addGap(18, 18, 18)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 212, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(NuevoMensajeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cmdBorrar, javax.swing.GroupLayout.DEFAULT_SIZE, 44, Short.MAX_VALUE)
                    .addComponent(cmdEnviar, javax.swing.GroupLayout.DEFAULT_SIZE, 44, Short.MAX_VALUE)
                    .addComponent(cmdSalir, javax.swing.GroupLayout.DEFAULT_SIZE, 44, Short.MAX_VALUE)
                    .addComponent(cmdGuardar, javax.swing.GroupLayout.DEFAULT_SIZE, 44, Short.MAX_VALUE))
                .addGap(24, 24, 24))
        );

        DefinirFiltros.setTitle("Definir Filtros");

        javax.swing.GroupLayout DefinirFiltrosLayout = new javax.swing.GroupLayout(DefinirFiltros.getContentPane());
        DefinirFiltros.getContentPane().setLayout(DefinirFiltrosLayout);
        DefinirFiltrosLayout.setHorizontalGroup(
            DefinirFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        DefinirFiltrosLayout.setVerticalGroup(
            DefinirFiltrosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout NuevaCarpetaLayout = new javax.swing.GroupLayout(NuevaCarpeta.getContentPane());
        NuevaCarpeta.getContentPane().setLayout(NuevaCarpetaLayout);
        NuevaCarpetaLayout.setHorizontalGroup(
            NuevaCarpetaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        NuevaCarpetaLayout.setVerticalGroup(
            NuevaCarpetaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        Nuevo.setText("jMenuItem1");
        menuArchivos.add(Nuevo);

        Borrar.setText("jMenuItem1");
        menuArchivos.add(Borrar);

        jLabel7.setBackground(new java.awt.Color(255, 0, 0));
        jLabel7.setForeground(new java.awt.Color(255, 0, 0));
        jLabel7.setText("Urgente");

        cmdAplicar.setText("Aplicar");
        cmdAplicar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdAplicarActionPerformed(evt);
            }
        });

        cmdCancelar.setText("Cancelar");
        cmdCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdCancelarActionPerformed(evt);
            }
        });

        jLabel8.setText("Elija la etiqueta que desea aplicar:");

        jLabel9.setBackground(new java.awt.Color(51, 51, 255));
        jLabel9.setForeground(new java.awt.Color(0, 51, 255));
        jLabel9.setText("Favoritos");

        jLabel10.setBackground(new java.awt.Color(0, 204, 0));
        jLabel10.setForeground(new java.awt.Color(0, 153, 0));
        jLabel10.setText("Importante");

        javax.swing.GroupLayout EtiquetaLayout = new javax.swing.GroupLayout(Etiqueta.getContentPane());
        Etiqueta.getContentPane().setLayout(EtiquetaLayout);
        EtiquetaLayout.setHorizontalGroup(
            EtiquetaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(EtiquetaLayout.createSequentialGroup()
                .addGroup(EtiquetaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(EtiquetaLayout.createSequentialGroup()
                        .addGap(131, 131, 131)
                        .addGroup(EtiquetaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(chkUrgente)
                            .addComponent(chkFavoritos)
                            .addComponent(chkImportante))
                        .addGap(18, 18, 18)
                        .addGroup(EtiquetaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel10)
                            .addComponent(jLabel7)
                            .addComponent(jLabel9)))
                    .addGroup(EtiquetaLayout.createSequentialGroup()
                        .addGap(100, 100, 100)
                        .addComponent(jLabel8))
                    .addGroup(EtiquetaLayout.createSequentialGroup()
                        .addGap(77, 77, 77)
                        .addComponent(cmdAplicar)
                        .addGap(77, 77, 77)
                        .addComponent(cmdCancelar)))
                .addContainerGap(54, Short.MAX_VALUE))
        );
        EtiquetaLayout.setVerticalGroup(
            EtiquetaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(EtiquetaLayout.createSequentialGroup()
                .addGap(30, 30, 30)
                .addComponent(jLabel8)
                .addGap(37, 37, 37)
                .addGroup(EtiquetaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(chkUrgente)
                    .addComponent(jLabel7, javax.swing.GroupLayout.Alignment.TRAILING))
                .addGap(18, 18, 18)
                .addGroup(EtiquetaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel10)
                    .addComponent(chkImportante))
                .addGap(18, 18, 18)
                .addGroup(EtiquetaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(chkFavoritos)
                    .addComponent(jLabel9))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 55, Short.MAX_VALUE)
                .addGroup(EtiquetaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cmdAplicar)
                    .addComponent(cmdCancelar))
                .addGap(42, 42, 42))
        );

        jLabel6.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabel6.setText("MENU DE CONFIGURACIONES");

        jLabel11.setText("-Servidor:");

        cmbServidores.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "SendMail", "Postfix" }));

        cmdGuardarConfiguraciones.setText("Guardar...");

        javax.swing.GroupLayout ConfiguracionesLayout = new javax.swing.GroupLayout(Configuraciones.getContentPane());
        Configuraciones.getContentPane().setLayout(ConfiguracionesLayout);
        ConfiguracionesLayout.setHorizontalGroup(
            ConfiguracionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, ConfiguracionesLayout.createSequentialGroup()
                .addGap(53, 53, 53)
                .addComponent(jLabel11)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 27, Short.MAX_VALUE)
                .addGroup(ConfiguracionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel6)
                    .addGroup(ConfiguracionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(cmdGuardarConfiguraciones)
                        .addComponent(cmbServidores, javax.swing.GroupLayout.PREFERRED_SIZE, 149, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(120, 120, 120))
        );
        ConfiguracionesLayout.setVerticalGroup(
            ConfiguracionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(ConfiguracionesLayout.createSequentialGroup()
                .addGap(26, 26, 26)
                .addComponent(jLabel6)
                .addGap(34, 34, 34)
                .addGroup(ConfiguracionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel11)
                    .addComponent(cmbServidores, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 143, Short.MAX_VALUE)
                .addComponent(cmdGuardarConfiguraciones)
                .addGap(32, 32, 32))
        );

        fileSave.setDialogType(javax.swing.JFileChooser.SAVE_DIALOG);
        fileSave.setDialogTitle("Guardar como");

        jScrollPane3.setViewportView(Tree);

        btn_Agregar.setText("Add");
        btn_Agregar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btn_AgregarActionPerformed(evt);
            }
        });

        btn_Delete.setText("Remover");
        btn_Delete.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btn_DeleteActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout ArbolCarpetasLayout = new javax.swing.GroupLayout(ArbolCarpetas.getContentPane());
        ArbolCarpetas.getContentPane().setLayout(ArbolCarpetasLayout);
        ArbolCarpetasLayout.setHorizontalGroup(
            ArbolCarpetasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(ArbolCarpetasLayout.createSequentialGroup()
                .addGap(19, 19, 19)
                .addGroup(ArbolCarpetasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(ArbolCarpetasLayout.createSequentialGroup()
                        .addComponent(btn_Agregar, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btn_Delete))
                    .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 213, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(386, Short.MAX_VALUE))
        );
        ArbolCarpetasLayout.setVerticalGroup(
            ArbolCarpetasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(ArbolCarpetasLayout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(ArbolCarpetasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btn_Agregar)
                    .addComponent(btn_Delete))
                .addContainerGap(49, Short.MAX_VALUE))
        );

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("SmartMail... Su Cliente Inteligente");
        setBackground(new java.awt.Color(255, 255, 255));

        panelMensajes.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                panelMensajesMouseClicked(evt);
            }
        });

        panelRecibidos.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));

        tablaRecibidos.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "MARCA", "ID", "REMITENTE", "ASUNTO", "CUERPO", "FECHA"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Boolean.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class
            };
            boolean[] canEdit = new boolean [] {
                true, false, false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tablaRecibidos.setCellSelectionEnabled(true);
        tablaRecibidos.setGridColor(new java.awt.Color(255, 255, 255));
        jScrollPane4.setViewportView(tablaRecibidos);

        cmdActualizar.setText("Actualizar...");
        cmdActualizar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdActualizarActionPerformed(evt);
            }
        });

        cdmEtiquetar.setText("Etiquetar...");
        cdmEtiquetar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cdmEtiquetarActionPerformed(evt);
            }
        });

        cmdExportarRecibidos.setText("Exportar");
        cmdExportarRecibidos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdExportarRecibidosActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout panelRecibidosLayout = new javax.swing.GroupLayout(panelRecibidos);
        panelRecibidos.setLayout(panelRecibidosLayout);
        panelRecibidosLayout.setHorizontalGroup(
            panelRecibidosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelRecibidosLayout.createSequentialGroup()
                .addGroup(panelRecibidosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelRecibidosLayout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 734, Short.MAX_VALUE))
                    .addGroup(panelRecibidosLayout.createSequentialGroup()
                        .addGap(110, 110, 110)
                        .addComponent(cmdActualizar)
                        .addGap(49, 49, 49)
                        .addComponent(cmdExportarRecibidos)
                        .addGap(56, 56, 56)
                        .addComponent(cdmEtiquetar)
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addContainerGap())
        );
        panelRecibidosLayout.setVerticalGroup(
            panelRecibidosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelRecibidosLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 367, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addGroup(panelRecibidosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cmdActualizar)
                    .addComponent(cdmEtiquetar)
                    .addComponent(cmdExportarRecibidos))
                .addGap(31, 31, 31))
        );

        panelMensajes.addTab("Recibidos()", panelRecibidos);

        tablaEnviados.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "MARCA", "ID", "DESTINATARIO", "ASUNTO", "CUERPO", "FECHA"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Boolean.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class
            };
            boolean[] canEdit = new boolean [] {
                true, false, false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tablaEnviados.setGridColor(new java.awt.Color(255, 255, 255));
        jScrollPane5.setViewportView(tablaEnviados);

        cmdExportarEnviados.setText("Exportar");
        cmdExportarEnviados.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdExportarEnviadosActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout panelEnviadosLayout = new javax.swing.GroupLayout(panelEnviados);
        panelEnviados.setLayout(panelEnviadosLayout);
        panelEnviadosLayout.setHorizontalGroup(
            panelEnviadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelEnviadosLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelEnviadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelEnviadosLayout.createSequentialGroup()
                        .addComponent(jScrollPane5, javax.swing.GroupLayout.DEFAULT_SIZE, 734, Short.MAX_VALUE)
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelEnviadosLayout.createSequentialGroup()
                        .addGap(0, 0, Short.MAX_VALUE)
                        .addComponent(cmdExportarEnviados, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(266, 266, 266))))
        );
        panelEnviadosLayout.setVerticalGroup(
            panelEnviadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelEnviadosLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane5, javax.swing.GroupLayout.DEFAULT_SIZE, 363, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addComponent(cmdExportarEnviados)
                .addGap(35, 35, 35))
        );

        panelMensajes.addTab("Enviados", panelEnviados);

        panelBorradores.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                panelBorradoresMouseClicked(evt);
            }
        });

        tablaBorradores.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "ID", "DESTINATARIO", "ASUNTO", "CUERPO", "FECHA"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tablaBorradores.setGridColor(new java.awt.Color(255, 255, 255));
        tablaBorradores.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaBorradoresMouseClicked(evt);
            }
        });
        jScrollPane7.setViewportView(tablaBorradores);

        javax.swing.GroupLayout panelBorradoresLayout = new javax.swing.GroupLayout(panelBorradores);
        panelBorradores.setLayout(panelBorradoresLayout);
        panelBorradoresLayout.setHorizontalGroup(
            panelBorradoresLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelBorradoresLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane7, javax.swing.GroupLayout.DEFAULT_SIZE, 734, Short.MAX_VALUE)
                .addContainerGap())
        );
        panelBorradoresLayout.setVerticalGroup(
            panelBorradoresLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelBorradoresLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane7, javax.swing.GroupLayout.DEFAULT_SIZE, 428, Short.MAX_VALUE)
                .addContainerGap())
        );

        panelMensajes.addTab("Borradores", panelBorradores);

        tablaEtiquetados.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Remitente", "Asunto", "Fecha", "Urgente", "Importante", "Favoritos"
            }
        ));
        jScrollPane6.setViewportView(tablaEtiquetados);

        javax.swing.GroupLayout panelEtiquetadosLayout = new javax.swing.GroupLayout(panelEtiquetados);
        panelEtiquetados.setLayout(panelEtiquetadosLayout);
        panelEtiquetadosLayout.setHorizontalGroup(
            panelEtiquetadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelEtiquetadosLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane6, javax.swing.GroupLayout.DEFAULT_SIZE, 734, Short.MAX_VALUE)
                .addContainerGap())
        );
        panelEtiquetadosLayout.setVerticalGroup(
            panelEtiquetadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelEtiquetadosLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane6, javax.swing.GroupLayout.DEFAULT_SIZE, 428, Short.MAX_VALUE)
                .addContainerGap())
        );

        panelMensajes.addTab("Etiquetados", panelEtiquetados);

        tablaBorradores1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "ID", "DESTINATARIO", "ASUNTO", "CUERPO", "FECHA"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tablaBorradores1.setGridColor(new java.awt.Color(255, 255, 255));
        tablaBorradores1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaBorradores1MouseClicked(evt);
            }
        });
        jScrollPane8.setViewportView(tablaBorradores1);

        javax.swing.GroupLayout panelEliminadosLayout = new javax.swing.GroupLayout(panelEliminados);
        panelEliminados.setLayout(panelEliminadosLayout);
        panelEliminadosLayout.setHorizontalGroup(
            panelEliminadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelEliminadosLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane8, javax.swing.GroupLayout.DEFAULT_SIZE, 734, Short.MAX_VALUE)
                .addContainerGap())
        );
        panelEliminadosLayout.setVerticalGroup(
            panelEliminadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelEliminadosLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane8, javax.swing.GroupLayout.DEFAULT_SIZE, 428, Short.MAX_VALUE)
                .addContainerGap())
        );

        panelMensajes.addTab("Eliminados", panelEliminados);

        lblLogo1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Interfaz/logo1.jpg"))); // NOI18N

        listaOpciones.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "Nuevo Mensaje", "Configuraciones", "Crear Filtros" };
            public int getSize() { return strings.length; }
            public Object getElementAt(int i) { return strings[i]; }
        });
        listaOpciones.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        listaOpciones.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                listaOpcionesMouseClicked(evt);
            }
        });
        listaOpciones.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                listaOpcionesKeyPressed(evt);
            }
        });
        jScrollPane1.setViewportView(listaOpciones);

        javax.swing.GroupLayout panelEscrituraLayout = new javax.swing.GroupLayout(panelEscritura);
        panelEscritura.setLayout(panelEscrituraLayout);
        panelEscrituraLayout.setHorizontalGroup(
            panelEscrituraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelEscrituraLayout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 215, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 6, Short.MAX_VALUE))
        );
        panelEscrituraLayout.setVerticalGroup(
            panelEscrituraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)
        );

        cmdMisCarpetas.setText("Mis Carpetas");
        cmdMisCarpetas.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdMisCarpetasActionPerformed(evt);
            }
        });

        Tree1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                Tree1MouseClicked(evt);
            }
        });
        jScrollPane9.setViewportView(Tree1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(23, 23, 23)
                        .addComponent(cmdMisCarpetas)
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(panelEscritura, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(lblLogo1)
                                    .addComponent(jScrollPane9, javax.swing.GroupLayout.PREFERRED_SIZE, 215, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGap(0, 0, Short.MAX_VALUE)))))
                .addGap(18, 18, 18)
                .addComponent(panelMensajes, javax.swing.GroupLayout.PREFERRED_SIZE, 759, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lblLogo1, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(panelEscritura, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jScrollPane9, javax.swing.GroupLayout.PREFERRED_SIZE, 187, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(cmdMisCarpetas))
                    .addComponent(panelMensajes))
                .addGap(32, 32, 32))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void listaOpcionesKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_listaOpcionesKeyPressed

    }//GEN-LAST:event_listaOpcionesKeyPressed

    private void listaOpcionesMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_listaOpcionesMouseClicked
        if (listaOpciones.getSelectedIndex() == 0)
        {
            
            NuevoMensaje.setSize(710, 500);
            NuevoMensaje.setLocationRelativeTo(this);
            NuevoMensaje.setModal(true);
            NuevoMensaje.setVisible(true);

        }
        if (listaOpciones.getSelectedIndex() == 1)
        {
            
            
            Configuraciones.setSize(550, 419);
            Configuraciones.setLocationRelativeTo(this);
            Configuraciones.setModal(true);
            Configuraciones.setVisible(true);
            
            
        }
        if (listaOpciones.getSelectedIndex() == 2)
        {
            
            
            DefinirFiltros.setSize(550, 419);
            DefinirFiltros.setLocationRelativeTo(this);
            DefinirFiltros.setModal(true);
            DefinirFiltros.setVisible(true);
            
            
        }

        
    }//GEN-LAST:event_listaOpcionesMouseClicked

    private void cmdBorrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdBorrarActionPerformed
        txtDestinatario.setText("");
        txtAsunto.setText("");
        txtMensaje.setText("");
        
    }//GEN-LAST:event_cmdBorrarActionPerformed

    private class Hilo extends Thread
    {
        public void run()
        {
            while (true)
            {
            try {
               // actualizar("RECIBIDO",tablaRecibidos);
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
            }
            }
        
        }
    }
    public void actualizarRecibidos()
    {
        MailRecibido email = new MailRecibido();
        recibidos = new ArrayList();
        try 
        {
            ListarEtiquetados();
        } catch (SQLException ex) 
        {
            Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
        }
        try 
        {
            int servidor = this.cmbServidores.getSelectedIndex();
            
            
            switch (servidor)
            {
                case 0: SendMailConexion conectarSMC = new SendMailConexion();
                        recibidos=conectarSMC.getMail(servidor+1);
                        break;
                    
                case 1: PostFixConexion conectarPFC = new PostFixConexion();
                        recibidos=conectarPFC.lookupMail(servidor+1);
                        break;
                
                default:JOptionPane.showMessageDialog(this, "No ha seleccionado un servidor de entrada");
                        break;
            }

            DefaultTableModel temp = (DefaultTableModel) tablaRecibidos.getModel();
            for (int i = tablaRecibidos.getRowCount() - 1; i >= 0; i--) {
                temp.removeRow(i);
            }
            for (int i = 0; i < recibidos.size(); i++) {
                //Cliente otroCliente = new Cliente();
                email =  (MailRecibido) recibidos.get(i);
                Object nuevo[] = {new Boolean(false),email.getId_mail(), email.getRemitente(), email.getAsunto(),email.getCuerpo(),email.getFecha()}; //esto es por las tres columnas aunque puede variar
                
                temp.addRow(nuevo);
            }
            tablaRecibidos.setModel(temp);
        } 
        catch (SQLException ex) 
        {
            Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
        /*SendMailDB recuperar= new SendMailDB();
        try {
 //Para establecer el modelo al JTable
            DefaultTableModel modelo = new DefaultTableModel();
            tabla.setModel(modelo);
            ResultSet rs=recuperar.cargaMail(TIPO);
 //Obteniendo la informacion de las columnas que estan siendo consultadas
            ResultSetMetaData rsMd = rs.getMetaData();
 //La cantidad de columnas que tiene la consulta
            int cantidadColumnas = rsMd.getColumnCount();
 //Establecer como cabezeras el nombre de las colimnas
            for (int i = 1; i <= cantidadColumnas; i++) 
            {
                modelo.addColumn(rsMd.getColumnLabel(i));
            }
 //Creando las filas para el JTable
            while (rs.next()) 
            {
                Object[] fila = new Object[cantidadColumnas];
                for (int i = 0; i < cantidadColumnas; i++) 
                {
                    fila[i]=rs.getObject(i+1);
                }
                modelo.addRow(fila);
            }
 
        } 
        catch (Exception ex) 
        {
            JOptionPane.showMessageDialog(NuevoMensaje, "Error en Acceso a la Base de Datos");
        }
    }*/

    private void cmdEnviarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdEnviarActionPerformed
        

        int bandera=0;
        if (txtDestinatario.getText().equals("") /*&& txtAsunto.getText().equals("") && txtAreaMensaje.getText().equals("")*/)
        {
            bandera++;
            JOptionPane.showMessageDialog(NuevoMensaje, "Por favor ingrese el Destinatario del mail");
        }
        if (bandera <=0 && txtAsunto.getText().equals(""))
        {
            bandera++;
            JOptionPane.showMessageDialog(NuevoMensaje, "Por favor ingrese el asunto del mail");
        }
        
        if (bandera <=0 && txtMensaje.getText().equals(""))
        {
            bandera++;
            JOptionPane.showMessageDialog(NuevoMensaje, "Por favor ingrese el cuerpo del mail");
        }
        
        if(bandera ==0 )
        {
           //try {
            if (borrador ==true)
            {
                mail = new MailEnviado((int) tablaBorradores.getValueAt(tablaBorradores.getSelectedRow(),0 ),txtDestinatario.getText(),txtAsunto.getText(),txtMensaje.getText(),fecha);
                ConexionMails borrar = new ConexionMails();
                try 
                {
                    borrar.enviarBorrador((MailEnviado)mail);
                    JOptionPane.showMessageDialog(NuevoMensaje, "Mensaje Enviado Exitosamente");
                    ListarEnviados();
                    ListarBorradores();
                    borrador=false;
                } catch (SQLException ex) 
                {
                    Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            else
            {
                mail = new MailEnviado(txtDestinatario.getText(),txtAsunto.getText(),txtMensaje.getText(),fecha);
                ConexionMails grabar = new ConexionMails();
                try 
                {
                    grabar.mailsEnviados((MailEnviado)mail);
                    JOptionPane.showMessageDialog(NuevoMensaje, "Mensaje Enviado Exitosamente");
                    ListarEnviados();
                } 
                catch (SQLException ex) 
                {
                    Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

                
        }
        
        
    }//GEN-LAST:event_cmdEnviarActionPerformed

    private void ListarEnviados()
    {
        ConexionMails conectar = new ConexionMails();
        Carpeta Enviados =new Carpeta();
        MailEnviado email;
        
        
        
        try 
        {
            enviados=conectar.listarEnviados();
            DefaultTableModel temp = (DefaultTableModel) tablaEnviados.getModel();
            for (int i = tablaEnviados.getRowCount() - 1; i >= 0; i--) {
                temp.removeRow(i);
            }
            for (int i = 0; i < enviados.size(); i++) {
                //Cliente otroCliente = new Cliente();
                email =  (MailEnviado) enviados.get(i);
                Object nuevo[] = {new Boolean(false),email.getId_mail(),email.getDestinatario(), email.getAsunto(),email.getCuerpo(),email.getFecha()}; //esto es por las tres columnas aunque puede variar
                
                temp.addRow(nuevo);
            }
            tablaEnviados.setModel(temp);
        } 
        catch (SQLException ex) 
        {
            Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
        }
    
    }
    private void ListarBorradores()
    {
        ConexionMails conectar = new ConexionMails();
        MailEnviado email;
        borradores = new ArrayList();
        try 
        {
            borradores=conectar.listarGuardados();
            
            DefaultTableModel temp = (DefaultTableModel) tablaBorradores.getModel();
            for (int i = tablaBorradores.getRowCount() - 1; i >= 0; i--) {
                temp.removeRow(i);
            }
            for (int i = 0; i < borradores.size(); i++) {
                //Cliente otroCliente = new Cliente();
                email =  (MailEnviado) borradores.get(i);
                Object nuevo[] = {email.getId_mail(),email.getDestinatario(), email.getAsunto(),email.getCuerpo(),email.getFecha()}; //esto es por las tres columnas aunque puede variar
                
                temp.addRow(nuevo);
            }
            tablaBorradores.setModel(temp);
        } 
        catch (SQLException ex) 
        {
            Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
        }
    
    }
    
    
    private void cmdSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdSalirActionPerformed
        NuevoMensaje.dispose();
        
    }//GEN-LAST:event_cmdSalirActionPerformed

    private void cmdGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdGuardarActionPerformed
        borrador=false;
        int bandera=0;
        if (txtDestinatario.getText().equals("") && txtAsunto.getText().equals("") && txtMensaje.getText().equals(""))
        {
            bandera++;
            JOptionPane.showMessageDialog(NuevoMensaje, "Por favor rellene al menos un campo");
        }
        else
        {
                mail = new MailEnviado(txtDestinatario.getText(),txtAsunto.getText(),txtMensaje.getText(),fecha);
            
            
                ConexionMails grabar = new ConexionMails();
                try 
                {
                    grabar.mailsGuardados((MailEnviado)mail);
                    JOptionPane.showMessageDialog(NuevoMensaje, "Mensaje Guardado Exitosamente");
                    ListarBorradores();
                } 
                catch (SQLException ex) 
                {
                    Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
                }
        }
    }//GEN-LAST:event_cmdGuardarActionPerformed

    private void cmdActualizarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdActualizarActionPerformed
 
       actualizarRecibidos();
       
        
    }//GEN-LAST:event_cmdActualizarActionPerformed

    private void cdmEtiquetarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cdmEtiquetarActionPerformed
       

        for (int i = 0; i < recibidos.size(); i++) 
        {
            if (tablaRecibidos.getValueAt(i, 0) == true)
            {
                 seleccionados.add((MailRecibido)recibidos.get(i));
            }    

       }
            Etiqueta.setSize(710, 500);
            Etiqueta.setLocationRelativeTo(this);
            Etiqueta.setModal(true);
            Etiqueta.setVisible(true);
        
    }//GEN-LAST:event_cdmEtiquetarActionPerformed

    private void cmdAplicarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdAplicarActionPerformed

       MailRecibido mail;
       
        for (int i = 0; i < seleccionados.size(); i++) 
        {
            mail = (MailRecibido) seleccionados.get(i);
            try 
            {
                aplicarEtiqueta(mail);
                Etiqueta.dispose();
                
                
                
                
                
            } catch (SQLException ex)
            {
                Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }//GEN-LAST:event_cmdAplicarActionPerformed

    public void ListarEtiquetados() throws SQLException
    {
        MailRecibido email = new MailRecibido();
        
        etiquetados = new ArrayList();
        
        try 
        {
            etiquetados=email.listarEtiquetados();
            //DefaultTableModel temp = (DefaultTableModel) tablaEtiquetados.getModel();
            /*for (int i = tablaEtiquetados.getRowCount() - 1; i >= 0; i--) {
                temp.removeRow(i);
            }
            for (int i = 0; i < etiquetados.size(); i++) {
                //Cliente otroCliente = new Cliente();
                email =  (MailRecibido) etiquetados.get(i);
                Object nuevo[] = {new Boolean(false),email.getId_mail(), email.getRemitente(), email.getAsunto(),email.getCuerpo(),email.getFecha()}; //esto es por las tres columnas aunque puede variar
                
                temp.addRow(nuevo);
            }*/
            //tablaEtiquetados.setModel(temp);
        } 
        catch (SQLException ex) 
        {
            Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        
        
        
    
    }
    
    
    public void aplicarEtiqueta(MailRecibido mail) throws SQLException{

        EtiquetaRoja eUrgente=new EtiquetaRoja();;
        EtiquetaVerde eImportante=new EtiquetaVerde();;       
        EtiquetaAzul eFavoritos=new EtiquetaAzul();;
        
                
        if (this.chkUrgente.isSelected())
            {
                eUrgente.setEtiqueta(mail);
                eUrgente.etiquetarMail(); 
                    
            }
        if (this.chkImportante.isSelected())
            {
                eImportante.setEtiqueta(mail);
                eImportante.etiquetarMail(); 
                    
            }
        if (this.chkFavoritos.isSelected())
            {
                eFavoritos.setEtiqueta(mail);
                eFavoritos.etiquetarMail();
                    
            }
    
}
    
    
    private void cmdCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdCancelarActionPerformed
        Etiqueta.dispose();
    }//GEN-LAST:event_cmdCancelarActionPerformed

    private void tablaBorradoresMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaBorradoresMouseClicked
       
        int numero=(int) tablaBorradores.getValueAt(tablaBorradores.getSelectedRow(),0 );
        //System.out.println(numero);
        
        MailEnviado email = new MailEnviado();
        for (int i = 0; i < borradores.size(); i++) {
                //Cliente otroCliente = new Cliente();
                email =  (MailEnviado) borradores.get(i);
                //Object nuevo[] = {email.getId_mail(),email.getDestinatario(), email.getAsunto(),email.getCuerpo(),email.getFecha()}; //esto es por las tres columnas aunque puede variar
                if (email.getId_mail() == numero)
                {
                    txtDestinatario.setText(email.getDestinatario());
                    txtAsunto.setText(email.getAsunto());
                    txtMensaje.setText(email.getCuerpo());
                    borrador =true;
                }
                //temp.addRow(nuevo);
            }
        
        
        NuevoMensaje.setSize(710, 500);
        NuevoMensaje.setLocationRelativeTo(this);
        NuevoMensaje.setModal(true);
        NuevoMensaje.setVisible(true);
        
        //
        
        
    }//GEN-LAST:event_tablaBorradoresMouseClicked

    private void tablaBorradores1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaBorradores1MouseClicked
        // TODO add your handling code here:
    }//GEN-LAST:event_tablaBorradores1MouseClicked

    
   /* public void GuardarDatos()
    {
        //Texto guardar = new Texto();
            /*&& Path.equalsIgnoreCase(null)
           //if (Path == null && guardar.getFilename()== null  )
          // {
                try
                {
                   

                    //this.setTitle(name);
                    if (name.equalsIgnoreCase(""))
                    {

                    }
                    else
                    {
                        //this.setTitle(name);
                        //name=name+ ".txt";
                        guardar.Guardar(txtArea.getText(), name);
                        
                        //Path=name;
                    }
                }
                catch (FileNotFoundException ex)
                {
                Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
                }
           
           
    }*/
    
    public String nombreGuardarArchivo()
    {
        int retorn = fileSave.showSaveDialog (this);
        if (retorn == JFileChooser.APPROVE_OPTION )
        {
            return fileSave.getSelectedFile ().toString ();
        }
        else
        {
            return "";
        }
    }

    private void cmdExportarRecibidosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdExportarRecibidosActionPerformed
           
        ExportarMailRecibido mail = new ExportarMailRecibido();
        for (int i = 0; i < recibidos.size(); i++) 
        {
            if (tablaRecibidos.getValueAt(i, 0) == true)
            {
                 //seleccionados.add((MailRecibido)recibidos.get(i));
                 String nombre = nombreGuardarArchivo() ;
                 
                //String nombre=JOptionPane.showInputDialog(this,"Ingrese el nombre para el mail: ");
                 mail.Exportar(recibidos.get(i),nombre);
                 
            }    

       }
        
        
    }//GEN-LAST:event_cmdExportarRecibidosActionPerformed

    private void cmdExportarEnviadosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdExportarEnviadosActionPerformed
        
        ExportarMailEnviado mail = new ExportarMailEnviado();
        for (int i = 0; i < enviados.size(); i++) 
        {
            if (tablaEnviados.getValueAt(i, 0) == true)
            {
                 //seleccionados.add((MailRecibido)recibidos.get(i));
                 String nombre = nombreGuardarArchivo() ;
                 
                //String nombre=JOptionPane.showInputDialog(this,"Ingrese el nombre para el mail: ");
                 mail.Exportar(enviados.get(i),nombre);
                 
            }    

       }
    }//GEN-LAST:event_cmdExportarEnviadosActionPerformed

    private void cmdMisCarpetasActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdMisCarpetasActionPerformed
            ArbolCarpetas.setSize(550, 419);
            ArbolCarpetas.setLocationRelativeTo(this);
            ArbolCarpetas.setModal(true);
            ArbolCarpetas.setVisible(true);
    }//GEN-LAST:event_cmdMisCarpetasActionPerformed

    private void btn_AgregarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btn_AgregarActionPerformed
        // TODO add your handling code here:
        /**
         * Agrega un nodo en donde es creado en el orden correcto
         */
        String cade = JOptionPane.showInputDialog(this, "Ingrese el nombre de la carpeta:");
        DefaultMutableTreeNode parentNode = null;
        DefaultMutableTreeNode child = new DefaultMutableTreeNode(cade);
        TreePath parentPath = Tree.getSelectionPath();
        if (parentPath == null) {
        } else {
            parentNode = (DefaultMutableTreeNode) (parentPath.getLastPathComponent());
        }
        modelo.insertNodeInto(child, parentNode, parentNode.getChildCount());
       String padre = parentNode.toString();
        try {
            agregarCarpeta(padre, cade);
        } catch (SQLException ex) {
            Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_btn_AgregarActionPerformed

    private void btn_DeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btn_DeleteActionPerformed
        // TODO add your handling code here:
        DefaultMutableTreeNode parentNode = null;
//         DefaultMutableTreeNode child =new DefaultMutableTreeNode(cade);
        TreePath parentPath = Tree.getSelectionPath();

        if (parentPath == null) {
        } else {
            parentNode = (DefaultMutableTreeNode) (parentPath.getLastPathComponent());
        }
//       modelo.insertNodeInto(child, parentNode, parentNode.getChildCount());
        modelo.removeNodeFromParent(parentNode);
    }//GEN-LAST:event_btn_DeleteActionPerformed

    private void Tree1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_Tree1MouseClicked
       
        DefaultMutableTreeNode parentNode = new DefaultMutableTreeNode();
        TreePath parentPath = Tree1.getSelectionPath();
        Carpeta aux=new Carpeta();
        if (parentPath == null) 
        {
        } else 
        {
            parentNode = (DefaultMutableTreeNode) (parentPath.getLastPathComponent());
        }
        //modelo.insertNodeInto(child, parentNode, parentNode.getChildCount());
       String padre = parentNode.toString();
       if (padre.equals("BANDEJA DE ENTRADA"))
       {
           
           System.out.println("ENTRA");
           panelMensajes.setSelectedIndex(0);
           
       }
       if (padre.equals("BANDEJA DE SALIDA"))
       {
            System.out.println("SALE");
           panelMensajes.setSelectedIndex(1);
       }
       if (padre.equals("ELIMINADOS"))
       {
           
           
           panelMensajes.setSelectedIndex(4);
           
       }
       if (padre.equals("BORRADORES"))
       {
           
           panelMensajes.setSelectedIndex(2);
       }
       
        
    }//GEN-LAST:event_Tree1MouseClicked

    private void panelMensajesMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_panelMensajesMouseClicked
        
    }//GEN-LAST:event_panelMensajesMouseClicked

    private void panelBorradoresMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_panelBorradoresMouseClicked
        
    }//GEN-LAST:event_panelBorradoresMouseClicked

    public DefaultTreeModel cargarArbol() {
        
        ListaCarpetas lista= new ListaCarpetas();
        ArrayList<Carpeta> listacarpetas=lista.getListaCarpetas();
        Carpeta unaCarpeta;
        DefaultMutableTreeNode nodo = null;
        unaCarpeta=listacarpetas.get(0);
        nodo = new DefaultMutableTreeNode(unaCarpeta.getNombre());
        modelo = new DefaultTreeModel(nodo);
        
        for (int i=1;i<listacarpetas.size();i++)
        {
            
            
                unaCarpeta=listacarpetas.get(i);
                int id_p=unaCarpeta.getId_padre();
                //System.out.print(id_p);
                Carpeta aux = new Carpeta();
                aux=lista.buscarCarpetaId(id_p);
                System.out.print(unaCarpeta.getNombre());
                System.out.print(aux.getNombre());
                if (unaCarpeta.getNombre().equals("BANDEJA DE ENTRADA"))
                {
                    unaCarpeta.setMails(recibidos);
                }
                if (unaCarpeta.getNombre().equals("BANDEJA DE SALIDA"))
                {
                    unaCarpeta.setMails(enviados);
                }
                DefaultMutableTreeNode nodo1 = new DefaultMutableTreeNode(unaCarpeta.getNombre());
                DefaultMutableTreeNode nodop = new DefaultMutableTreeNode(aux.getNombre());
                
                modelo.insertNodeInto(nodo1,nodo,i-1);
                

        
        }
   
       return modelo;
       
   
    }
    

    
    public void agregarCarpeta(String padre, String nombre) throws SQLException
    {
        ListaCarpetas lista=new ListaCarpetas();
        Carpeta c=lista.buscarCarpeta(padre);
        int id=lista.getNumCarpetas();
        Carpeta nueva=new Carpeta(id+1,nombre,c.getId_caperta());
        lista.agregarCarpeta(nueva);

            JOptionPane.showMessageDialog(this.ArbolCarpetas, "Carpeta Ingresada");

        
    }
    
    public void cargarCarpetas() throws SQLException
    {
        ListaCarpetas cargar = new ListaCarpetas();
        cargar.cargarCarpetas();
    }
    public void cargar() {
        //Tree.setModel(cargarArbol());
        Tree1.setModel(cargarArbol());
        
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /*
         * Set the Nimbus look and feel
         */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /*
         * If Nimbus (introduced in Java SE 6) is not available, stay with the
         * default look and feel. For details see
         * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /*
         * Create and display the form
         */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Principal().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JDialog ArbolCarpetas;
    private javax.swing.JMenuItem Borrar;
    private javax.swing.JDialog Configuraciones;
    private javax.swing.JDialog DefinirFiltros;
    private javax.swing.JDialog Etiqueta;
    private javax.swing.JDialog NuevaCarpeta;
    private javax.swing.JMenuItem Nuevo;
    private javax.swing.JDialog NuevoMensaje;
    private javax.swing.JTree Tree;
    private javax.swing.JTree Tree1;
    private javax.swing.JButton btn_Agregar;
    private javax.swing.JButton btn_Delete;
    private javax.swing.JButton cdmEtiquetar;
    private javax.swing.JCheckBox chkFavoritos;
    private javax.swing.JCheckBox chkImportante;
    private javax.swing.JCheckBox chkUrgente;
    private javax.swing.JComboBox cmbServidores;
    private javax.swing.JButton cmdActualizar;
    private javax.swing.JButton cmdAplicar;
    private javax.swing.JButton cmdBorrar;
    private javax.swing.JButton cmdCancelar;
    private javax.swing.JButton cmdEnviar;
    private javax.swing.JButton cmdExportarEnviados;
    private javax.swing.JButton cmdExportarRecibidos;
    private javax.swing.JButton cmdGuardar;
    private javax.swing.JButton cmdGuardarConfiguraciones;
    private javax.swing.JButton cmdMisCarpetas;
    private javax.swing.JButton cmdSalir;
    private javax.swing.JFileChooser fileSave;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JScrollPane jScrollPane5;
    private javax.swing.JScrollPane jScrollPane6;
    private javax.swing.JScrollPane jScrollPane7;
    private javax.swing.JScrollPane jScrollPane8;
    private javax.swing.JScrollPane jScrollPane9;
    private javax.swing.JLabel lblFecha;
    private javax.swing.JLabel lblLogo1;
    private javax.swing.JList listaOpciones;
    private javax.swing.JPopupMenu menuArchivos;
    private javax.swing.JPanel panelBorradores;
    private javax.swing.JPanel panelEliminados;
    private javax.swing.JPanel panelEnviados;
    private javax.swing.JPanel panelEscritura;
    private javax.swing.JPanel panelEtiquetados;
    private javax.swing.JTabbedPane panelMensajes;
    private javax.swing.JPanel panelRecibidos;
    private javax.swing.JTable tablaBorradores;
    private javax.swing.JTable tablaBorradores1;
    private javax.swing.JTable tablaEnviados;
    private javax.swing.JTable tablaEtiquetados;
    private javax.swing.JTable tablaRecibidos;
    private javax.swing.JTextField txtAsunto;
    private javax.swing.JTextField txtDestinatario;
    private javax.swing.JTextArea txtMensaje;
    // End of variables declaration//GEN-END:variables
}


